package com.example.zyl.api.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.zyl.api.entity.SysMinio;
import com.example.zyl.api.entity.dto.SysMinioDto;
import com.example.zyl.api.mapper.SysMinioMapper;
import com.example.zyl.api.service.SysMinioService;
import com.example.zyl.common.query.page.PageParam;
import com.example.zyl.common.utils.MinioUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.Objects;


/**
 * (SysMinio)表服务实现类
 *
 * @author zyl
 * @since 2025-01-13 15:45:00
 */
@Service("sysMinioService")
@RequiredArgsConstructor
public class SysMinioServiceImpl extends ServiceImpl<SysMinioMapper, SysMinio> implements SysMinioService {
    
    private final SysMinioMapper sysMinioMapper;

   
    @Override
    public SysMinio queryById(Long minioId) {
        return this.sysMinioMapper.queryById(minioId);
    }

    /**
     * 分页查询
     *
     * @param pageParam 筛选条件
     * @return 查询结果
     */
     @Override
     public Page<SysMinio> queryByPage(PageParam<SysMinio, SysMinioDto> pageParam) {
        //获取查询条件
        SysMinioDto tableDto = pageParam.getParam();
        //获取分页信息
        Page<SysMinio> page = pageParam.getPage();
        //构建查询条件
        QueryWrapper<SysMinio> wrapper = tableDto.defaultWrapper();
        //执行查询
        return sysMinioMapper.selectPage(page, wrapper);
     }

    /**
     * 新增数据
     *
     * @param sysMinio 实例对象
     * @return 实例对象
     */
    @Override
    public SysMinio insert(SysMinio sysMinio) {
        this.sysMinioMapper.insert(sysMinio);
        return sysMinio;
    }

    /**
     * 修改数据
     *
     * @param sysMinio 实例对象
     * @return 实例对象
     */
    @Override
    public SysMinio update(SysMinio sysMinio) {
        this.sysMinioMapper.update(sysMinio, Wrappers.emptyWrapper());
        return this.queryById(sysMinio.getMinioId());
    }

    /**
     * 通过主键删除数据
     *
     * @param minioId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Long minioId) {
        return this.sysMinioMapper.deleteById(minioId) > 0;
    }

    @Override
    public Long upload(MultipartFile file) {
        String upload = MinioUtils.upload(file);
        if (upload != null) {
            SysMinio sysMinio = new SysMinio();
            sysMinio.setMinioId(IdWorker.getId());
            sysMinio.setOriginalName(file.getOriginalFilename());
            sysMinio.setFileName(file.getName());
            sysMinio.setMinioBucket(MinioUtils.bucket);

            sysMinio.setFileSuffix(Objects.requireNonNull(file.getOriginalFilename())
                    .substring(file.getOriginalFilename().lastIndexOf(".")));

            sysMinio.setContentType(file.getContentType());
            sysMinio.setFileUrl(upload.concat(String.valueOf(sysMinio.getMinioId())));
            sysMinio.setFileSize((double) file.getSize());
            sysMinio.setDefault();
            this.insert(sysMinio);
            return sysMinio.getMinioId();
        }
        return null;
    }

    @Override
    public void download(Long minioId, HttpServletResponse response) {
        SysMinio sysMinio = this.queryById(minioId);
        MinioUtils.download(sysMinio.getOriginalName(), response);
    }
}
